package replaceStringUtil;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
/**
 * @category自动生成_LookAndFeel_完美增强版_0.2-_- ，使用说明如下：
 * @author XIAOBAI
 * @Date 08 JAN 2013
 * @Description：
 * ----------------------------------------------------------------1-----------------------------------------------------------------------------
 * 1、在‘替换.TXT'中保存替换格式文本,如 ： 
 * SeleniumUtil.assertTrue(SeleniumUtil.isDisplayed(SeleniumUtil.getCachedElement(SmsIncidentEditPageUtil.这里是要插入的By)));
 * 							| 							 							 					|
 * 							|  							 							 					|
 *  						| 							 							 					|
 *  			这里指定assertTrue前半部分格式													这里指定具体是哪个PageUtil
 * ----------------------------------------------------------------2------------------------------------------------------------------------------
 * 2、在‘截取.TXT'中保存要截取的文本格式也就是定义的By，页面中需要验证的By有多少个就在这个文件中写入多少，其实只需要从pageUtil中复制过来就行了。如：
 * public final static By IE_LINK_TAB_EVENTS_SAVE = By.id("IncEventEdit1_btnSave");
 * 		 						|
 *  							|
 *  							|
 * 						这里是指出上面需要的By
 *-----------------------------------------------------------------3------------------------------------------------------------------------------ 
 * 3、到‘替换后的文本.TXT’中copy出来，然后整理即可，需要更改@Test的方法名(testMethod)
 * 4、注意：本版本将pageUtil中的类和方法需要采用静态引用格式如下： 先import 包名.类名; 然后import static 包名.类名.*;
 */

public class StringReplaceString07 {

	List<String> des = new ArrayList<String>();// 存储'截取.TXT'中的内容
	String sou;// 存储'替换.TXT'中的内容
	List<String> my = new ArrayList<String>();// 存储生成的内容

	@Test
	public void test() {

		StringReplaceString07 srs = new StringReplaceString07();
		
		srs.readfile();
		
		srs.replaceString("SeleniumUtil.assertTrue(SeleniumUtil.isDisplayed(SeleniumUtil.getCachedElement(",
				")));", "public final static By", " = By.");
		
		srs.getAssertEqualsAndEditable();
		//--------------------------------------------------扯淡开始--------------------------------------------------
		System.out.println("柏大爷您好！我已光荣完成任务，欧耶!");
		System.out.println();
		System.out.println("©2012 xiaobai 京ICP证888888号 版权所有,盗版必究!");
		System.out.println();
		System.out.println("*----记得要更改equals哦!----*最后祝柏大爷天天开心，身体健康，出门捡钱 O_O");
		//--------------------------------------------------扯淡结束--------------------------------------------------
	}
	
	/** 读取要替换的文件和要截取的文件的内容存储到List集合中*/
	private void readfile() {
		File file1 = new File("F:/截取.txt");
		File file2 = new File("F:/替换.txt");
		
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(file1));
			while (br.ready()) {
				String s = br.readLine();
				des.add(s.trim());
			}

			br = new BufferedReader(new FileReader(file2));
			if (br.ready()) {
				this.sou = br.readLine().trim();
			}

		} catch (IOException e) {
			System.out.println("replace error...");
			e.printStackTrace();
		} finally {
			try {
				if(br != null)
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/** 从集合中读取要替换的内容和要截取用来替换的内容并进行替换，将结果存入my集合中*/
	private void replaceString(String startDes, String endDes, String startSou,	String endSou) {
		if (des.size() != 0) {
			for (int i = 0; i < des.size(); i++) {
				if (des.get(i).startsWith(startSou)	&& des.get(i).contains(endSou)) {
					String[] start = des.get(i).split(startSou);
					String[] end = start[1].split(endSou);
					if (sou.startsWith(startDes) && sou.endsWith(endDes)) {
						my.add(startDes + end[0].trim() + endDes);
					}
				}
			}
		}
	}

	/** 从集合中读出assertTrue的内容并将内容进行新的替换，
	 *	将替换结果保存在集合my中，
	 *	同样从集合中读出assertTrue的内容并将内容进行新的替换 ，
	 * 	将替换结果保存在集合my中，
	 * 	将assertTrue的内容写到目标文件中。
	*/
	private void getAssertEqualsAndEditable() {
		
		List<String> lastStringList = new ArrayList<String>();
		BufferedWriter bw = null;
		try {
			File file = new File("F:/替换后的文本.txt");
			if (file.exists()) {
				file.delete();
				file = new File("F:/替换后的文本.txt");
			}
			
			for(int i=0; i<my.size(); i++){
				String s = my.get(i).replaceAll("assertTrue", "assertEquals");
				if(s.trim().endsWith(")));")){
					lastStringList.add(s.replaceAll("SeleniumUtil.isDisplayed\\(", "\"\", ").replaceAll("\\)\\)\\)\\;", ").getText().trim());"));
				}else{
					lastStringList.add(s);
				}
			}
			bw = new BufferedWriter(new FileWriter(file));
			
			bw.write("\t@Test\r\n\tpublic void 方法名(){\r\n\t\ttry {\r\n\t\t\tenter();" +
					"\r\n\t\t\tassertVisible();\r\n\t\t\tassertEditable();\r\n\t\t\tassertEqual();" +
					"\r\n\t\t} catch (Exception e) {\r\n\t\t\tSeleniumUtil.getScreenShot(e);\r\n\t\t}\r\n\t}\r\n\r\n"
		);
			// 从my集合中读出isDisplayed的元素并写入‘替换后的文本.TXT’中的assertVisible方法中 
			bw.write("\tprivate void assertVisible() {\r\n");
			for (int i = 0; i < my.size(); i++) {
				bw.write("\t\t" + my.get(i));
				bw.write("\r\n");
			}
			
			bw.write("\t}\r\n\r\n\tprivate void assertEqual() {\r\n");
			
			for (int i = 0; i < lastStringList.size(); i++) {
				bw.write("\t\t" + lastStringList.get(i));
				bw.write("\r\n");
			}
			bw.write("\t}\r\n\r\n\tprivate void assertEditable() {\r\n");
			lastStringList = new ArrayList<String>();
			for(int i=0; i<my.size(); i++){
				String s = my.get(i).replaceAll("assertTrue", "assertTrue");
				if(s.trim().endsWith(")));")){
					lastStringList.add(s.replaceAll("SeleniumUtil.isDisplayed", "SeleniumUtil.isEnabled"));
				}else{
					lastStringList.add(s);
				}
			}
			for (int i = 0; i < lastStringList.size(); i++) {
				bw.write("\t\t" + lastStringList.get(i));
				bw.write("\r\n");
			}
			bw.write("\t}");
			
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}finally{
			try {
				if(bw != null)
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}